#include<stdio.h>

int main()
{
    //指针：特殊的数据类型   数据类型 *
    //指针内部存在的是内存地址
    //&：取地址符号
    //*：取值符号
    /* int a=10;
    int* p=&a; */ //p里面存着a的地址
/*     printf("%d\n",*p); */

    /* printf("%ld\n",sizeof(p)); */ //指针占8个字节

    //以地址形式输出一个整数值
    /* printf("%p\n",p); */  //地址本质上就是整数值，代表的是内存的编号
    //指针是无符号长整型数据
    //*p=20; 把p的内存赋值20
    /* p=20; */ //把地址改成20 野指针:指向非法内存

    //变量定义必须要初始化，指针更是如此
    /* int *p2=NULL; */ //NULL：空指针
    /* printf("%p\n",*p); */


    //以    16进制形式输出一个整数值
    /* printf("%x\n",p); */

    int a=10;
    int *p=&a;
    /* *p=20;
    printf("%d\n",a); */
    //二级指针：存储了指针变量的地址的指针变量
    int **p2=&p;

    //p2:p的地址
    //*p:p的值（a的地址）
    //**p2:a的值
    /* printf("%p\n",p2); */

    return 0;
}